const jwt = require('jsonwebtoken');
const { JWT_TOKEN_KEY, JWT_TOKEN_EXPIRESIN } = require('./settings');

/**
 * TOKEN 生成，有效期 10s
 * @param {*} data
 */
module.exports.jwtSign = (data) => {
  const token = jwt.sign(data /* token主题信息 */, JWT_TOKEN_KEY, {
    expiresIn: JWT_TOKEN_EXPIRESIN, // 设置过期时间
  });
  return 'Bearer ' + token;
};

/**
 * TOKEN 验证
 * @param {*} req
 * @param {*} res
 * @param {*} next
 */
module.exports.jwtCheck = (req, res, next) => {
  // TODO 获取请求头标识 token
  const {
    headers: {
      // 获取前端自定义请求头参数值
      authorization,
    },
    originalUrl,
  } = req;

  // console.log(global._BASE_PATH);
  // fs.readdir(Path('/public/klein-web'), (error, files) => {
  //   if (!error) {
  //     console.log(files);
  //   }
  // });

  // 不需要验证TOKEN接口
  const nover = ['/klein-service/web/login', '/klein-service/web/register'];
  if (nover.find((item) => item === originalUrl)) {
    next();
    return;
  }

  if (/^Bearer /.test(authorization)) {
    // Bearer 令牌 authorization.split(' ')[1]
    const token = authorization.replace('Bearer ', '');
    jwt.verify(token, JWT_TOKEN_KEY, (error, data) => {
      if (!error && data) {
        // { _uid: '', _username:'', iat: 1703663763, exp: 1707263763 } = data;
        next();
      } else {
        res.status(401).send({
          msg: '令牌已过期，请重新登录!!!',
        });
        return;
      }
    });
  } else {
    res.status(401).send({
      msg: '令牌无效，请重新登录!!!',
    });
    return;
  }
};
